package main

import (
	"fmt"
	"reflect"
)

func main() {
	type cat struct {
		Name string
		Type int `json:"type" id:"100"`
	}

	ins := cat{Name: "mini", Type: 1}
	// 获取结构体实例的反射类型对象
	typeOfCat := reflect.TypeOf(ins)
	// 边界结构体的所有成员
	for i := 0; i < typeOfCat.NumField(); i++ {
		// 获取每一个成员的结构体字段类型
		fieldType := typeOfCat.Field(i)
		// 输出成员名和 tag
		fmt.Printf("name: '%v', tag: '%v' \n", fieldType.Name, fieldType.Tag)
	}

	// 通过字段名， 找到字段类型信息
	if catType, ok := typeOfCat.FieldByName("Type"); ok {
		// 从 tag 中取出需要的 tag
		fmt.Println(catType.Tag.Get("json"), catType.Tag.Get("id"))
	}
}
